package com.ymx.darling.util;

import com.ymx.darling.type.TypeHandlerRegister;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author 爱java的小于
 */
public class ObjectUtil {
    /**
     * 缓存类型的名称
     */
    private static final Map<Class<?>, String> simpleNameMap = new ConcurrentHashMap<>();
    

    /**
     * 传入一个空值时会返回字符串null
     * 否则会返回指定类型的简单名称
     * 例如 : java.lang.String 替换为 String
     * java.lang.Long 替换为 Long
     * 等等
     * @param c 指定类型
     * @return String
     */
    public static String getSimpleName(Class<?> c) {
        if (c == null) {
            return "null";
        }
        return simpleNameMap.computeIfAbsent(c,  t-> c.getSimpleName());
    }


    /**
     * 根据Class判断是否是简单的类型
     *
     * @param type type
     * @return boolean
     */
    public static boolean isSimpleType(Class<?> type) {
        return TypeHandlerRegister.typeIsExists(type);
    }


    /**
     * 判断是否属于List或Map的类型
     * @param type type
     * @return boolean
     */
    public static boolean isListOrMap(Class<?> type) {
        return Objects.nonNull(type) && (Map.class.isAssignableFrom(type) || List.class.isAssignableFrom(type));
    }
}
